/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import Facade.Facade;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import model.Documento;
import org.hibernate.HibernateException;
import org.richfaces.event.FileUploadEvent;
import org.richfaces.model.UploadedFile;

/**
 *
 * @author Jefferson
 */
public class CtrManterDocumento {
    private String nomeArquivo = "";
    private Documento documento;
    private Facade facade;
    
    public CtrManterDocumento() {}
    
    public void inserir() {
        FacesContext context = FacesContext.getCurrentInstance();
        
        try {
            documento.setNome(nomeArquivo);
            facade = Facade.getInstance();
            facade.inserirDocumento(documento);
            
            FacesMessage msg = new FacesMessage("Documento salvo com sucesso!");
            msg.setSeverity(FacesMessage.SEVERITY_INFO);
            context.addMessage(null, msg);
        }
        catch (HibernateException e) {
            FacesMessage msg = new FacesMessage(e.getMessage());
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
        }
    }
    
    public void alterar() {
        FacesContext context = FacesContext.getCurrentInstance();
        
        try {
            if (!nomeArquivo.equals("") && !nomeArquivo.equals(documento.getNome())) {
                delDocumento();
                documento.setNome(nomeArquivo);
            }
            
            facade = Facade.getInstance();
            facade.alterarDocumento(documento);
            
            FacesMessage msg = new FacesMessage("Documento alterado com sucesso!");
            msg.setSeverity(FacesMessage.SEVERITY_INFO);
            context.addMessage(null, msg);
        }
        catch (HibernateException e) {
            FacesMessage msg = new FacesMessage(e.getMessage());
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
        }
    }
    
    public void excluir() {
        FacesContext context = FacesContext.getCurrentInstance();
        
        try {
            facade = Facade.getInstance();
            facade.excluirDocumento(documento);
            delDocumento();
            
            FacesMessage msg = new FacesMessage("Documento excluído com sucesso!");
            msg.setSeverity(FacesMessage.SEVERITY_INFO);
            context.addMessage(null, msg);
        }
        catch (HibernateException e) {
            FacesMessage msg = new FacesMessage(e.getMessage());
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
        }
    }
    
    public List getDocumentos() {
        try {
            facade = Facade.getInstance();
            return facade.listarTodosDocumentos("nome");
        }
        catch (HibernateException e) {
            return null;
        }
    }

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    public void upload(FileUploadEvent event) {
        FacesContext context = FacesContext.getCurrentInstance();    
        ServletContext sc = (ServletContext) context.getExternalContext().getContext();
        
        UploadedFile item = event.getUploadedFile();
        String s[] = item.getName().split("\\\\");
        nomeArquivo = s[s.length - 1];
        String diretorio = sc.getRealPath("/documentos");
        
        File pasta = new File(diretorio);  
        if (!pasta.exists()) {  
            pasta.mkdir();  
        }
        
        FileOutputStream saida;
        File novoArquivo = new File(diretorio + "/" + nomeArquivo);
        try {
            saida = new FileOutputStream(novoArquivo);
            saida.write(item.getData());
            saida.flush();
            saida.close();
        } 
        catch (FileNotFoundException e) {  
            FacesMessage msg = new FacesMessage("Documento não encontrado!");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
        } 
        catch (IOException e) {  
            FacesMessage msg = new FacesMessage("Erro ao fazer upload do documento!");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
        }
    }
    
    private void delDocumento() {
        FacesContext context = FacesContext.getCurrentInstance();    
        ServletContext sc = (ServletContext) context.getExternalContext().getContext();
        
        String diretorio = sc.getRealPath("/documentos");
        File arquivo = new File(diretorio + "/" + documento.getNome());
        arquivo.delete();
    }
}